package com.github.McPlugin.util.Task;


import com.google.gson.Gson;
import org.bukkit.entity.EntityType;

import java.util.HashMap;


public class Task {
    private int ID;//任务编号
    private String TaskName;//任务名
    private String TaskDescription;//任务描述
    private String TaskType;//任务操作对象，只能是Entity或者Block
    private HashMap tasks;//任务需求的hashmap，key为EntityType，value为任务要求数目
    private Boolean flag = false;
    private Gson g;//用于序列化

    /**
     * 用于从数据库获取任务时候使用
     * @param tasks
     */
    public void setTasks(HashMap tasks) {
        this.tasks = tasks;
    }

    /**
     * aa
     */
    public Task() {
        tasks = new HashMap();
        g = new Gson();
    }

    /**
     * 判断玩家是否完成此项任务
     * @return
     */
    public Boolean isFinished() {
        return flag;
    }

    /**
     * 将任务设置为已完成。
     */
    public void setFinished(){
        this.flag = true;
    }

    /**
     * 获得任务编号
     * @return int类型，任务编号
     */
    public int getID() {
        return ID;
    }

    /**
     * 设置任务编号
     * @param ID
     */
    public void setID(int ID) {
        this.ID = ID;
    }

    /**
     * 获得任务描述
     * @return String类型
     */
    public String getTaskDescription() {
        return TaskDescription;
    }

    /**
     * 设置任务描述
     * @param taskDescription String类型
     */
    public void setTaskDescription(String taskDescription) {
        TaskDescription = taskDescription;
    }

    /**
     * 获得任务操作对象类型，只可以获得Entity或者Block或者Mixed(即任务既包含与Entity有关的要求，又包含与Block有关的内容)
     * @return String类型 任务操作对象类型
     */
    public String getTaskType() {
        return TaskType;
    }

    /**
     * 设置任务操作对象类型，只可以设置Entity或者Block
     * @param taskType String类型，只可以设置Entity或者Block
     */
    public void setTaskType(String taskType) {
        TaskType = taskType;
    }

    /**
     * 获得储存任务要求的哈西表
     * @return hashmap
     */
    public HashMap getTasks() {
        return tasks;
    }

    /**
     * 添加任务对象为实体的任务，将其加入到HashMap中
     * @param entitytype 实体的类型，如PIG、COW
     * @param count 任务需要击杀的数目
     */
    public void setEntityTasks(String entitytype, int count) {
        this.tasks.put(g.fromJson(entitytype, EntityType.class), count);
    }

    /**
     * 添加方块新增的任务
     * @param type 对方块操作的类型，建造或者毁坏，只能传入Block_break或者Block_build
     * @param count 任务需要操作的方块的数目
     */
    public void setBlockTask(String type, int count){
        this.tasks.put(type, count);
    }

    /**
     * 获取任务的名字
     * @return
     */
    public String getTaskName() {
        return TaskName;
    }

    /**
     * 设置任务的名字
     * @param taskName
     */
    public void setTaskName(String taskName) {
        TaskName = taskName;
    }
}
